import {reqgetCartList,reqDelCartGoods,reqUpdateCartGoods} from '@/api'

const state = {
  // 购物车数据
  shopcart: [],
}

const getters = {
  cartList(){  
    return state.shopcart[0] || []
  }
}

const mutations = {
  // 购物车数据
  GETCARTLIST(state,data){
    state.shopcart=data
  }
}

const actions = {
  // 没有数据,因为没有登陆，token验证,模拟生成一个随机id,在发送请求时放入请求头中
  // 购物车数据
 async getCartList({commit}){
   const res=await reqgetCartList()
   if(res.code===200){
    commit('GETCARTLIST',res.data)
   }
  },
  // 删除购物车数据
 async delCartGoods(context,skuId){
    const res =await reqDelCartGoods(skuId)
    if(res.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('fail'))
    }
  },
  // 改变购物车商品状态
async updateCartGoods(context,{skuId,isChecked}){
  const res =await reqUpdateCartGoods(skuId,isChecked)
  if(res.code === 200){
    return 'ok'
  }else{
    return Promise.reject(new Error('fail'))
  }
 },
 // 删除选中的商品
 delChooseCartGoods({dispatch,getters}){
  const PromiseAll = []
  // 遍历购物车列表，找到选中的商品，删除
  // 删除购物车的actions有返回值，添加到Promise.all中，等待所有请求完成
  // 再次调用删除单个商品的actions
  getters.cartList.cartInfoList.forEach(item=>{
    // 遍历购物车列表，找到选中的商品，删除
    // 删除购物车的actions有返回值，添加到Promise.all中，等待所有请求完成
    if(item.isChecked){
      let promise = dispatch('delCartGoods',item.skuId)
      PromiseAll.push(promise)
    }
  })
  // 如果有一个请求失败，则返回失败，否则返回成功
  return Promise.all(PromiseAll)
 } ,
  //修改全选按钮状态控制每个商品的选中状态
  updateAllCartGoods({dispatch,getters},isChecked){
    //数组
    let promiseAll = []; 
    getters.cartList.cartInfoList.forEach((item) => {
      let promise = dispatch("updateCartGoods", {
        skuId: item.skuId,
        isChecked,
      });
      promiseAll.push(promise);
    });
    //最终返回结果
    return Promise.all(promiseAll);
  } 
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}